#include <REGX52.H>
#include "Delay.h"
#include "LCD1602.h"
#include "MATRIXKEY.h"

unsigned char KeyNum;				  // 按下的键码
unsigned int Password;				  // 密码
unsigned int Count;					  // 输入次数
unsigned int CORRECT_PASSWORD = 2021; // 正确密码

/**
  * 密码、计次清零
  */
void Clear() {
	Password = 0; // 密码清零
	Count = 0;	  // 计次清零
	LCD_ShowNum(2, 1, Password, 4);	// LCD显示更新
}


/**
  * 矩阵键盘S1~S9代表1~9，S10代表0。S11确认。S12取消。
  */
void main() {
	LCD_Init();
	LCD_ShowString(1, 1, "Password:");

	while(1) {
		// 获取矩阵键盘的按键
		KeyNum = MatrixKey();
		// 输入密码
		if (KeyNum > 0 && KeyNum < 11) {			
			if (Count >= 4) {
				continue;					// 只能输入四次
			}
			Count++;						// 计次加1
			Password *= 10; 
			Password += KeyNum % 10; 		// 1~9取余是本身，10取余是0
			LCD_ShowNum(2, 1, Password, 4);	// LCD显示更新
		}
		
		// 确认
		if (KeyNum == 11) {			
			if (Password == CORRECT_PASSWORD) {
				LCD_ShowString(1, 14, "OK "); // 密码正确
				Clear();
			} else {
				LCD_ShowString(1, 14, "ERR"); // 密码错误
				Clear();
			}
		}
		
		// 取消
		if (KeyNum == 12) {			
			Clear();
		}
	}
}